﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Data;
using DataAccessLayer;
using DTO;

namespace DAL
{
    public class NhaSanXuatDAL
    {
        private DBManager _dbmanager;

        #region Phương thức khởi tạo mặc định
        /// <summary>
        /// Phương thức khởi tạo mặc định
        /// </summary>
        public NhaSanXuatDAL()
        {
            string _connectionInfo = ConfigurationManager.AppSettings["ConnectionInfo"];
            _dbmanager = new DBManager(DataProvider.SqlServer, _connectionInfo);
        }
        #endregion

        #region Phương thức tạo 1 nhà sản xuất từ Data Reader
        /// <summary>
        /// Phương thức tạo 1 nhà sản xuất từ Data Reader
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        private NhaSanXuatDTO CreateNhaSanXuatFromReader(IDataReader reader)
        {
            NhaSanXuatDTO _nsxDTO = new NhaSanXuatDTO();
            _nsxDTO.MaNhaSanXuat = Convert.ToString(reader["MaNhaSanXuat"]);
            _nsxDTO.TenNhaSanXuat = Convert.ToString(reader["TenNhaSanXuat"]);
            _nsxDTO.Logo = Convert.ToString(reader["Logo"]);
            _nsxDTO.DiaChi = Convert.ToString(reader["DiaChi"]);
            _nsxDTO.DienThoai = Convert.ToString(reader["DienThoai"]);
            _nsxDTO.Fax = Convert.ToString(reader["Fax"]);
            _nsxDTO.URL = Convert.ToString(reader["URL"]);
            return _nsxDTO;
        }
        #endregion

        #region Phương thức lấy toàn bộ thông tin nhà sản xuất
        /// <summary>
        /// Phương thức lấy toàn bộ thông tin nhà sản xuất
        /// </summary>
        /// <returns></returns>
        public List<NhaSanXuatDTO> GetListNhaSanXuat()
        {
            List<NhaSanXuatDTO> _lst = new List<NhaSanXuatDTO>();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListNhaSanXuat");
                while (_reader.Read())
                    _lst.Add(this.CreateNhaSanXuatFromReader(_reader));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _lst;
        }
        #endregion

        #region Phương thức lay thong tin 1 nhà sản xuất
        /// <summary>
        /// Phương thức lay thong tin 1 nhà sản xuất
        /// </summary>
        /// <param name="mansp"></param>
        /// <returns></returns>
        public NhaSanXuatDTO GetNhaSanXuat(string mansx)
        {
            NhaSanXuatDTO _nsxDTO = new NhaSanXuatDTO();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_nsx", mansx);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getNhaSanXuat");
                while (_reader.Read())
                    _nsxDTO = this.CreateNhaSanXuatFromReader(_reader);
                

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _nsxDTO;
        }
        #endregion

        #region Phương thức thêm 1 nhà sản xuất        
        public int Them(NhaSanXuatDTO nsx)
        {
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(7);
                _dbmanager.AddParameters(0, "@ma_nsx", nsx.MaNhaSanXuat);
                _dbmanager.AddParameters(1, "@ten_nsx", nsx.TenNhaSanXuat);
                _dbmanager.AddParameters(2, "@logo", nsx.Logo);
                _dbmanager.AddParameters(3, "@diachi", nsx.DiaChi);
                _dbmanager.AddParameters(4, "@dienthoai", nsx.DienThoai);
                _dbmanager.AddParameters(5, "@fax", nsx.Fax);
                _dbmanager.AddParameters(6, "@url", nsx.URL);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_ThemNhaSanXuat");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
        }
        #endregion

        #region Phương thức sửa 1 nhà sản xuất
        public int Sua(NhaSanXuatDTO nsx)
        {
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(7);
                _dbmanager.AddParameters(0, "@ma_nsx", nsx.MaNhaSanXuat);
                _dbmanager.AddParameters(1, "@ten_nsx", nsx.TenNhaSanXuat);
                _dbmanager.AddParameters(2, "@logo", nsx.Logo);
                _dbmanager.AddParameters(3, "@diachi", nsx.DiaChi);
                _dbmanager.AddParameters(4, "@dienthoai", nsx.DienThoai);
                _dbmanager.AddParameters(5, "@fax", nsx.Fax);
                _dbmanager.AddParameters(6, "@url", nsx.URL);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_CapNhatNhaSanXuat");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
        }
        #endregion

        #region Phương thức xóa một nhà sản xuất
        public int Xoa(NhaSanXuatDTO nsx)
        {
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_nsx", nsx.MaNhaSanXuat);
                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_XoaNhaSanXuat");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
        }
        #endregion
    }
}